// 类型转换示例文件: type_conversion.rs
// 本文件演示Rust中各种基本数据类型之间的相互转换

pub fn main() {
    // 1. 整数类型之间的转换
    let int_val: i32 = 42;
    let small_int: i8 = int_val as i8; // 向下转型，可能丢失数据
    let big_int: i64 = int_val as i64; // 向上转型，安全
    println!("整数转换: i32({}) -> i8({}), i32({}) -> i64({})
", int_val, small_int, int_val, big_int);

    // 2. 整数转浮点数
    let int_num: i32 = 100;
    let float_num: f64 = int_num as f64;
    println!("整数转浮点数: i32({}) -> f64({})
", int_num, float_num);

    // 3. 浮点数转整数
    let float_val: f64 = 3.14159;
    let truncated: i32 = float_val as i32; // 截断小数部分
    println!("浮点数转整数: f64({}) -> i32({}) (截断)
", float_val, truncated);

    // 4. 布尔值转换
    let bool_val = true;
    let bool_to_int = bool_val as i32; // true -> 1, false -> 0
    println!("布尔值转整数: bool({}) -> i32({})
", bool_val, bool_to_int);

    // 5. 字符与整数转换
    let char_val = 'A';
    let char_to_int = char_val as u32; // 获取ASCII/Unicode码
    let int_to_char = 66 as char; // 从ASCII码创建字符
    println!("字符与整数转换: '{}' -> {}, {} -> '{}'
", char_val, char_to_int, 66, int_to_char);

    // 6. 字符串转换 (需要使用parse方法，可能失败)
    let num_str = "123"; 
    let parsed_int: Result<i32, _> = num_str.parse();
    match parsed_int {
        Ok(n) => println!("字符串转整数: '{}' -> i32({})
", num_str, n),
        Err(e) => println!("转换失败: {}
", e),
    }

    // 7. 整数转字符串
    let num = 456;
    let num_to_str = num.to_string();
    println!("整数转字符串: {} -> '{}'
", num, num_to_str);

    // 8. 浮点数转字符串
    let pi = 3.14159;
    let pi_to_str = pi.to_string();
    println!("浮点数转字符串: {} -> '{}'
", pi, pi_to_str);

    // 9. 使用From/Into trait进行转换
    let int_to_string = String::from("Hello");
    println!("使用From trait: 字符串 -> String: '{}'
", int_to_string);

    let my_int = 100;
    let my_float: f64 = my_int.into(); // Into由From自动实现
    println!("使用Into trait: i32({}) -> f64({})
", my_int, my_float);
}